#pragma once 
#include <iostream>
#include <string>

#include <sys/types.h>
#include <sys/socket.h>

class Util
{
  public:
    static int ReadLine(int sock, std::string &out)
    {
        char ch = 'X';  //用于记录每次读到的字符
        while(ch != '\n')
        {
            ssize_t s = recv(sock, &ch, 1, 0);
            if(s > 0)
            {
                if(ch == '\r')
                {
                    recv(sock, &ch, 1, MSG_PEEK);   //向后窥探一个字符并不取走
                    if(ch == '\n')
                    {
                        //把\r\n->\n
                        recv(sock, &ch, 1, 0);
                    }
                    else 
                    {
                        //把\r->\n
                        ch = '\n';
                    }
                }
                out.push_back(ch);
            }
            else if (s == 0)
            {
                return 0;   //对端关闭连接
            }
            else 
            {
                return -1;  //读取出错               
            }
        }
        return out.size();
    }
    static bool CutString(const std::string &target, std::string &sub1_out, std::string &sub2_out, std::string sep)
    {
        size_t pos = target.find(sep);
        if(pos != std::string::npos)
        {
            sub1_out = target.substr(0, pos);
            sub2_out = target.substr(pos + sep.size());
            return true;
        }
        return false; 
    }
};  